package social.server.historicActivity;

import java.util.Date;
import java.util.List;
import java.util.Random;

/**
 * Classe responsavel pelas Publicacoes de requisicao de Item.
 * Essa classe eh usada para que algum usuario possa publicar 
 * que necessita de algum item em especial
 * 
 * @author Grupo: Brunna Amorim, Caio Libanio, Diego de Lima, Dimitre Andrew e
 *         Rafael Cavalcante
 *
 */

public class PublicateRequestActivity implements HistoricActivity{
	
	private String userName;
	private String userLogin;
	private String itemName;
	private String description;
	private String activity;
	private Date date;
	private String IdpublicationRequest;
	
	public PublicateRequestActivity(String userLogin, String itemName, String description) throws Exception{
		this.date = new Date();
		this.userName = social.server.main.System.getInstance().getUser(userLogin).getName();
		this.userLogin = userLogin;
		this.itemName = itemName;
		this.description = description;
		this.IdpublicationRequest = userLogin + "/" + itemName + "/" + description + generateCode();
		buildActivity();
		
	}
	
	/**
	 * Retorna a data de criacao da publcacao
	 */
	
	@Override
	public Date getDate() {
		return date;
	}
	
	/**
	 * Verifica se duas requisicoes sao iguais, retornando true em caso
	 * afirmativo, ou false para caso negativo
	 */

	@Override
	public boolean equals(HistoricActivity object) {
		if (!(object instanceof PublicateRequestActivity)) {
			return false;
		}			
		PublicateRequestActivity pub = (PublicateRequestActivity) object;
		
		if(activity.equals(pub.getActivity())){
			return true;
		}

		return false;
	}
	
	/**
	 * Retorna uma String que simboliza a Publicacao.
	 */
	
	@Override
	public String getActivity() {
		return activity;
	}
	
	/**
	 * Constroi a atividade ( simbolizada por uma String ) usando 
	 * as imformacoes da Publicacao
	 */

	@Override
	public void buildActivity() {
		activity = userName + " precisa do item " + itemName;
		
	}
	/**
	 * Retorna o nome do usuario dono da Publicacao
	 * @return 
	 */

	public String getUserName() {
		return userName;
	}
	
	/**
	 * Retorna o nome do Item que o usuario deseja imprestado
	 * @return
	 */
	
	public String getItemName(){
		return itemName;
	}
	
	/**
	 * Verifica se uma Data eh mais recente que a outra
	 */
	
	
	@Override
	public boolean compareDates(Date dateActivity) {
		if (date.compareTo(dateActivity) < 0) {
			return false;
		}
		return true;
	}
	
	public String getPublicationId(){
		return IdpublicationRequest;
	}
	
	/**
	 * Metodo que gera um codigo de forma aleatoria
	 * @return Codigo gerado
	 */

	private int generateCode(){
		int cont;
		int num;
		do{
			cont = 0;
			List<Integer> codeList = social.server.main.System.getInstance().getRequestCodeList();
			Random rand = new Random();
			num = rand.nextInt();
			if(num < 0) num *= -1;
			if(codeList.size() == 0){
				social.server.main.System.getInstance().addRequestCodeList(num);
			}else{
				for(int i = 0; i < codeList.size(); i++){
					if(codeList.get(i) == num){
						++cont;
						break;
					}
				}
		}
		
		}while(cont != 0);
		
		social.server.main.System.getInstance().addRequestCodeList(num);
		return num;
		
	}

}
